package formationStrategies;

import java.util.ArrayList;
import java.util.List;

import players.FutbolPlayer;
import players.Position;
import teams.Formation;
import teams.Team;

public class FormationStrategyImpl extends FormationStrategy {

    // Constructor Original
    public FormationStrategyImpl(final List<Position> listaPosiciones) {

        this.positions = listaPosiciones;
    }

    // constructor Vacio para el hibernate
    public FormationStrategyImpl() {
        this.positions = new ArrayList<Position>();
    }

    // Variables
    private List<Position> positions;

    // Metodos

    @Override
    /**
     * Construye una formacion a partir de un equipo.
     */
    public Formation buildFormation(final Team team) {
        // Crea una formaci�n.
        Formation formacionAux = new Formation(team);
        // Agrega a la lista de suplentes,todos los jugadores del equipo.
        formacionAux.getSubstitutes().addAll(team.getPlayers());
        // Inicializa la variable jugador,que se va a utilizar en el FOR.
        FutbolPlayer jugador;

        for (Position posicion : this.getPositions()) {

            jugador = team.getBestPlayer(posicion, formacionAux);

            // este metodo eliminia el jugador de los suplentes
            // crea un Titular con ese jugador
            // y lo agrega a la lista de Titulares
            formacionAux.updateFormation(jugador, posicion);
        }
        return formacionAux;

    }

    /**
     * Agrega una position(posici�n) a la lista de positions.
     * 
     * @param aPosition
     */
    public void addPosition(final Position aPosition) {
        this.positions.add(aPosition);
    }

    // Getters y Setters

    public List<Position> getPositions() {
        return this.positions;
    }

    public void setPositions(final List<Position> posiciones) {
        this.positions = posiciones;
    }

}
